openwrt

您所在的位置:网站首页 openwrt diskgenius openwrt

openwrt

2024-06-29 04:59| 来源: 网络整理| 查看: 265

openwrt_21.02_img_空间扩容_分区扩容_改分区表大小

转载注明来源: 本文链接 来自osnosn的博客,写于 2021-11-08.

其他文章 实体路由器刷op后扩容,见【newifi_D2_新3_lede_插U盘扩容overlay_装可道云】 环境 扩容的操作是在命令行下的 这是在 unraid 6.9 的终端内操作的,用到的命令 unraid 系统中都有,无需额外安装。 理论上,在Linux的终端下,比如 debian,centos,应该是一样的。 qemu-img 命令: debain 装 apt install qemu-utils, centos8 装 yum install qemu-img 。 扩容后的 img 就可以在 unraid 中创建虚拟机。启动它了。 以下测试成功了四个 img 映像文件。 两个是 MBR 分区格式的。unraid 创建虚拟机时,BIOS:选SeaBIOS。 两个是 GPT 分区格式的。并且在unraid 中 以 UEFI 方式成功启动。 unraid 中要用 uefi 启动,创建虚拟机时,BIOS:要选择OVMF或OVMF TPM。 如果要对硬盘,或者sd卡上的openwrt扩容,此文也有参考价值。 先把 img 写入磁盘,然后挂在Linux系统下,从修改分区表开始做。 虚拟机中安装openwrt的步骤 去官网下载 x86-64 的 xxxx.img.gz 的映像压缩包。 解压开来,变成 xxxx.img 映像文件。 copy到 unraid 中,或者别的什么Linux 系统中,进行扩容。 把扩容之后的 img 文件,copy 到你的虚拟机系统,比如 unraid 中,用它创建 openwrt的虚拟机。 然后启动它,配置它,使用它。 扩容 openwrt-21.02.1-x86-64-generic-ext4-combined-efi.img

----扩容开始---- qemu-img resize xxxxxxxx.img 200M #扩容映像本身, 根据你自己的需要,确定扩容的大小 losetup -f xxx.img #挂载到 loop 设备。losetup -Pf xxx.img 会顺便读取分区信息,加载到系统。 losetup -a #查看挂在哪个 loop 设备上了,我这是 loop4 partx -a /dev/loop4 #读取分区信息,加载到系统 使用 fdisk 或 parted 都可以。我分别测试过,都能成功启动,扩容结果一样。parted做法见下文【其他尝试-parted 命令】。 fdisk /dev/loop4 #分区扩容,显示这个映像是gpt格式的 m 显示fdisk的命令帮助,任何时候都可以用 m看看帮助 x 进入高级菜单 p 列出分区表, 看看分区2的 Start, Name, Type-UUID, UUID, 抄下 Name。通常 Name是空值。 r 返回基本菜单 p 列出分区表, 看看分区Type, 大小 i 2 显示分区2的信息 抄下 Start, Type, UUID, 马上会用到。"Type-UUID"不用抄,没用。     (扩 ext4-combined.img,UUID不用抄,因为fdisk看不到,也不用改。见下文) ---下面开始改分区表--- d 2 删除分区2 n 2 创建分区2

开始扇区,抄原来的分区2的 Start, 一定要一样 结束扇区,默认 或者自己定义大小,但要比原来的大 有个警告,已经有文件系统,是否清除它的签名/标记, 选"否","No"

t 2 修改分区2的类型

11 改类型为11 (Microsoft basic data),我的是11。这个根据你自己的情况,改回原来的 Type。    op23的官方版,类型为20 (Linux filesystem), 默认就是,不用改了。 打L查看所有可选择的类型。 打q不改类型。

x 进入高级菜单 u 修改分区2的UUID,抄原来的分区2,不改回,启动失败; 或者修改分区1中boot/grub/grub.cfg中的PARTUUID n 修改分区2的Name,原来的分区2没Name。这项可以跳过。 r 返回基本菜单, 才能写盘保存 w 保存 这个时候,有个警告,但又显示写成功了。不理它。 ----分区表修改完成--- partx -u /dev/loop4 #更新系统中的分区信息,一定要更新,否则后面扩容会失败 e2fsck /dev/loop4p2 #检查ext4 文件系统, 带上-f参数更省事 resize2fs /dev/loop4p2 #ext4 文件系统扩容 partx -d /dev/loop4 #卸载系统中的分区信息 losetup -d /dev/loop4 #卸载 loop 设备 ----扩容完成----

ext4 格式的img,没扩容显示 /dev/root 总 Size 是 102.4MB。 img扩到200MB的结果,以uefi方式启动成功,扩容成功。空间大了不少。显示:Filesystem Size Used Available Use% Mounted on ​ /dev/root 180.2M 15.7M 160.9M 9% / 对于 ext4 格式的 img 文件,启动运行过之后,再次扩容: 把上面的步骤再做一遍就行了。 理论上,op 系统中曾经修改过的东西,再扩容后,会被保留,不会丢失。 扩容 openwrt-21.02.5-x86-64-generic-ext4-combined.img

MBR 分区。扩容操作与 ext4-combined-efi.img 一样。扩大映像文件,分区扩容,文件系统扩容。

分区扩容: 用fdisk或cfdisk或parted都可以。cfdisk方便快捷,parted比较方便。 不用设置分区2的 UUID。因 MBR 分区的也不能改UUID。 文件系统扩容: e2fsck 和 resize2fs 这两步要做,不能省略。 扩容 openwrt-21.02.1-x86-64-generic-squashfs-combined-efi.img

也是 gpt 分区。扩容操作与 ext4-combined-efi.img 一样。扩大映像文件,分区扩容。

分区扩容: 分别使用 cfdisk, fdisk, parted。其中 cfdisk 不行,fdisk和parted都OK。 尝试用 cfdisk,先sort,再resize。结果做出来的img无法启动。 fdisk 修改分区表OK,能启动。扩容结果与 parted 一样。 parted 修改分区表OK,能启动。具体做法见下文【其他尝试-parted 命令】。 无需做文件系统扩容,跳过 e2fsck 和 resize2fs 这两步。 squashfs 没扩容是多大,忘了记录。 img扩到200MB的结果,以uefi方式启动成功,扩容成功。空间利用率比ext4差了点。显示:Filesystem Size Used Available Use% Mounted on ​ /dev/loop0 177.5M 75.7M 101.8M 43% /overlay Overlayfs:/overlay 177.5M 75.7M 101.8M 43% / 扩容 openwrt-21.02.5-x86-64-generic-squashfs-combined.img

MBR 分区。扩容操作与 ext4-combined-efi.img 一样。扩大映像文件,分区扩容。

分区扩容: 我分别用 fdisk, parted, cfdisk 做了一次。都能成功启动。 映像文件都是扩到200M,启动后看到的: cfdisk做的总空间是177.0M,fdisk,parted做的总空间是177.5M。 用 cfdisk 直接对第二分区 resize,方便快捷。 用 fdisk 除了不用设置分区2的 UUID 和 Name,其他步骤一样。 分区1中boot/grub/grub.cfg也是通过PARTUUID挂载。 但 MBR 的文件系统 UUID,就是 PTUUID 加一个后缀,不会变的。 用 parted 对分区2 resize,比较方便。具体做法见下文【其他尝试-parted 命令】。 无需做文件系统扩容,跳过 e2fsck 和 resize2fs 这两步。 img扩到200MB的结果(用 cfdisk),启动成功,扩容成功。显示:Filesystem Size Used Available Use% Mounted on /dev/loop0 177.0M 75.2M 101.8M 42% /overlay overlayfs:/overlay 177.0M 75.2M 101.8M 42% / 这个扩到 200M 的 squashfs格式的 img 文件,启动运行过之后,再次扩容: qemu-img resize xxxxxxxx.img 250M 继续扩到 250MB。 用 fdisk或parted 对分区扩容。(我测试时,img 挂在 /dev/loop0,squashfs分区就是 /dev/loop0p2) squashfs文件系统,用 e2fsck, resize2fs 都会报错,不能用。 这个时候,把img文件拿去启动。启动成功,但是空间没变,还是 177.0M 。 转到debian系统,下面用到的两个软件包,unraid 没有。 装 f2fs-tools, 发现 fsck.f2fs, resize.f2fs 也报错,不能用。 装 squashfs-tools , 只包含两个命令,mksquashfs 和 unsquashfs 。unsquashfs -stat /dev/loop0p2 #查看文件系统超级块信息,看到"Compression xz" unsquashfs -l /dev/loop0p2 #查看文件系统内的文件列表 unsquashfs /dev/loop0p2 #解压所有文件到当前目录的"squashfs-root/"中 mksquashfs squashfs-root /dev/loop0p2 -comp xz -noappend #用xz压缩,再把文件写回去,以防op内核只支持这种压缩 #卸载loop0后,拿去启动 这个 250MB 文件,成功启动,扩容成功。不过原来修改过的数据没了(恢复出厂设置了)。显示:Filesystem Size Used Available Use% Mounted on /dev/loop0 227.1M 81.3M 145.8M 36% /overlay overlayfs:/overlay 227.1M 81.3M 145.8M 36% / 对于 openwrt-XX-squashfs-combined-efi.img 使用过后,再次扩容。也是一样的。 对分区2 扩容,然后重写分区2 的squashfs的文件系统,即可。 如果要保留文件系统中修改过的内容。 在重写squashfs之前,先挂载(mount)这个分区,备份这个分区中的文件。如:upper/和work/目录。 用tar czvf bak.tgz -C /挂载点 ./或cd /挂载点; find ./ |cpio -ov > .../bak.cpio。 重写squashfs之后,再挂载(mount)这个分区,恢复这些备份文件。 用cd /挂载点; tar zxvf .../bak.tgz或cd /挂载点; cpio -idv < .../bak.cpio。 其他尝试 对于 ext4-combined-efi.img 和 squashfs-combined-efi.img 这两个映像都是 gpt 分区。分别有三个分区,(1,2,128)。 cfdisk 不能对分区2直接 resize。因为openwrt-21版的分区2没有排在最后。 cfdisk 需要重新排序分区表(sort),才能resize分区。尝试排序后resize,发现映像无法启动。 efi文件不能使用cfdisk,否则无法启动。 gdisk 打开时说GPT分区表损坏。主表存在,但备份表没有。cgdisk 也是这个提示。 gdisk 删除分区2,重新创建分区2时,不能识别剩余空间,无法扩容。新建的分区可以修改UUID。 cgdisk 删除2,重新创建2时,不能识别剩余空间,无法扩容。没地方修改分区的UUID。也不能对现有的分区resize。 所以 gdisk 和 cgdisk 不行。 ext4-combined.img 和 squashfs-combined.img ,这两个映像都是 MBR 分区格式。分别有两个分区,(1,2)。 gdisk 和 cgdisk 说要帮你转换成 gpt 格式。不能用于 mbr 的分区格式。 fdisk 看不到有 uuid。 cfdisk 可以看到有uuid,并且可以直接对第二分区 resize。 建议用 cfdisk 修改分区。更方便。 sfdisk 好复杂,不会用。sgdisk 也不会用。 parted 命令 unraid6.9没有,unraid6.12有。debian中有。简单,仅两部即可完成分区扩容。 efi文件(GPT),非efi文件(MBR) 都能用。GPT的要回答两个问题,MBR的不会问。 建议只resize分区2,分区类型不变,分区的uuid不变。另外 parted 没有修改/设置uuid的功能。=># parted /dev/loop1 print free Error: 备份GPT corrupt,主GPT OK, 是否用主的. OK/Cancel? o #回答ok Warning: 似乎没有使用所有可用空间,是否修复GPT以使用所有空间? Fix/Ignore? f #回答fix Number Start End Size File system Name Flags ...... 2 17.0MB 126MB 109MB #这是分区2 的信息 126MB 210MB 83.6MB Free Space #记住 free 空间的 End = 210M =># parted /dev/loop1 resizepart 2 210M #这里的 210M 就是 free空间的 End # 完成了,分区2的uuid没变,不用修改,也没法改。继续后续步骤, # ext4无论是否启动过都要resize2fs。squashfs未启动过,就免了,如果启动过,要重建squashfs文件系统。 # 卸载loop设备,拿去刷机启动吧。 kpartx 可以直接操作 img 文件,它会自动挂载到 loop 设备上。但 unraid 中没这个命令。 对于efi的映像,=># lsblk -o path,uuid,ptuuid,pttype /dev/loop1 PATH UUID PTUUID PTTYPE /dev/loop1 c120d9f5-d6f9-d15b-05a7-0d348f8a4b00 gpt /dev/loop1p1 1234-ABCD c120d9f5-d6f9-d15b-05a7-0d348f8a4b00 gpt /dev/loop1p2 c120d9f5-d6f9-d15b-05a7-0d348f8a4b00 gpt /dev/loop1p128 c120d9f5-d6f9-d15b-05a7-0d348f8a4b00 gpt =># lsblk -o path,parttype,partuuid /dev/loop1 PATH PARTTYPE PARTUUID /dev/loop1 /dev/loop1p1 0fc63daf-8483-4772-8e79-3d69d8477de4 c120d9f5-d6f9-d15b-05a7-0d348f8a4b01 /dev/loop1p2 0fc63daf-8483-4772-8e79-3d69d8477de4 c120d9f5-d6f9-d15b-05a7-0d348f8a4b02 /dev/loop1p128 21686148-6449-6e6f-744e-656564454649 c120d9f5-d6f9-d15b-05a7-0d348f8a4b80 =># fdisk -o device,type-uuid,uuid -l /dev/loop1 Disklabel type: gpt Disk identifier: C120D9F5-D6F9-D15B-05A7-0D348F8A4B00 Device Type-UUID UUID /dev/loop1p1 0FC63DAF-8483-4772-8E79-3D69D8477DE4 C120D9F5-D6F9-D15B-05A7-0D348F8A4B01 /dev/loop1p2 0FC63DAF-8483-4772-8E79-3D69D8477DE4 C120D9F5-D6F9-D15B-05A7-0D348F8A4B02 /dev/loop1p128 21686148-6449-6E6F-744E-656564454649 C120D9F5-D6F9-D15B-05A7-0D348F8A4B80 lsblk的uuid,是文件系统的uuid。 fdisk中看不到。 lsblk的ptuuid = fdisk的Disk identifier。 lsblk的parttype = fdisk的Type-UUID。 lsblk的partuuid = fdisk的UUID。 boot/grub.cfg 与 partuuid 的关系,看【用编译好的kernel-Image和rootfs制作img启动映像】。 映像文件转换格式 请看:【映像文件转换格式】 可以把 img 的 raw格式转为 hyper-v(vhdx), vmware(vmdk), virtualbox(vdi), xen(img)... 使用的格式。 用ImageBuilder打包自定义img 自定义packages。 自己定义生成的img大小。 对于x86 或 x86_64, 修改 .config 文件中, CONFIG_TARGET_ROOTFS_PARTSIZE=104,root分区104MB。 CONFIG_TARGET_KERNEL_PARTSIZE=16, boot分区16MB。 对于其他架构,找找类似target/linux/ramips/image/mt7621.mk或target/linux/ramips/image/Makefile中有没有地方修改。 比如 IMAGE_SIZE := 32448k。 参考【用ImageBuilder打包自定义img】。 自己手工制作启动映像 去官网下载 kernel-image,和rootfs,自己制作 启动映像。想做多大做多大。 比如: openwrt-22.03.2-x86-64-generic-kernel.bin, openwrt-22.03.2-x86-64-generic-ext4-rootfs.img.gz, 参考【制作img启动映像】。

转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/15524655.html 来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3